#include <iostream>

using namespace std;

/*
	模板函数的几种写法
	    写法1：模板声明，模板函数的定义放在主函数的前面
		写法2：模板声明放在主函数前面，模板函数的定义放在主函数后面
		写法3：头文件放模板声明，模板函数的源码放到.cpp
*/
//写法1：模板声明，模板函数的定义放在主函数的前面
template<class T1,class T2>  //声明两个模板参数，参数名字叫做T1，T2
T1 add(T1 n1,T2 n2)                    
{
	cout<<"调用了模板函数add,带两个模板参数"<<endl;
	return n1+n2;
}

//写法2：模板声明放在主函数前面，模板函数的定义放在主函数后面
template<class T1,class T2>
T1 sub(T1 n1,T2 n2); 

int main()
{
	int n1=78;
	int n2=96;
	double n3=56.98;
	double n4=12.36;
	
	add(n1,n2);
	sub(n1,n3);
	return 0;
}

template<class T1,class T2>
T1 sub(T1 n1,T2 n2)  
{
	cout<<"调用了模板函数sub,带两个模板参数"<<endl;
	return n1-n2;
}
